home *** CD-ROM | disk | FTP | other *** search
- Program Euxinus_3DTUTER2_LINES;
-
- uses crt,graph;
-
- type
- SORTTYPE = RECORD
- sortlist : Array [1..400,1..2] of INTEGER
- END;
- SCRCORD = RECORD { point on screen }
- X : INTEGER;
- Y : INTEGER;
- END;
- POINT = RECORD { Point in 3d space }
- X : INTEGER;
- Y : INTEGER;
- Z : INTEGER;
- END;
- POLYGON = RECORD
- cornerpoints : Array [1..4] of SCRCORD;
- whichpoints : Array [1..4] of INTEGER;
- howmanypoints : BYTE;
- zposition : INTEGER;
- shadedcolor,color : Integer;
- hidden : BOOLEAN;
- END;
- _3DOBJECT = RECORD
- degreinc : POINT;
- degre : POINT;
- numberofpoints : INTEGER;
- numberofpolys : INTEGER;
- POLYs : Array [1..400] of POLYGON;
- orginalcordinates : Array [1..500] of POINT;
- rotatedcordinates : Array [1..500] of POINT;
- screencordinates : Array [1..500] of SCRCORD;
- sortdata : Sorttype;
- objpos : POINT;
- end;
-
- var obj : _3DOBJECT;
- sina,cosa : Array [0..360] of real;
- page : BYTE;
- light : point;
-
-
- Procedure object2;
-
- BEGIN
- obj.numberofpoints:=12;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=20;
- obj.orginalcordinates[1].z:=0;
-
- obj.orginalcordinates[2].x:=0;
- obj.orginalcordinates[2].y:=10;
- obj.orginalcordinates[2].z:=18;
-
- obj.orginalcordinates[3].x:=18;
- obj.orginalcordinates[3].y:=10;
- obj.orginalcordinates[3].z:=4;
-
- obj.orginalcordinates[4].x:=10;
- obj.orginalcordinates[4].y:=10;
- obj.orginalcordinates[4].z:=-18;
-
- obj.orginalcordinates[5].x:=-10;
- obj.orginalcordinates[5].y:=10;
- obj.orginalcordinates[5].z:=-18;
-
- obj.orginalcordinates[6].x:=-18;
- obj.orginalcordinates[6].y:=10;
- obj.orginalcordinates[6].z:=4;
-
- obj.orginalcordinates[7].x:=0;
- obj.orginalcordinates[7].y:=-10;
- obj.orginalcordinates[7].z:=18;
-
- obj.orginalcordinates[8].x:=18;
- obj.orginalcordinates[8].y:=-10;
- obj.orginalcordinates[8].z:=4;
-
- obj.orginalcordinates[9].x:=10;
- obj.orginalcordinates[9].y:=-10;
- obj.orginalcordinates[9].z:=-18;
-
- obj.orginalcordinates[10].x:=-10;
- obj.orginalcordinates[10].y:=-10;
- obj.orginalcordinates[10].z:=-18;
-
- obj.orginalcordinates[11].x:=-18;
- obj.orginalcordinates[11].y:=-10;
- obj.orginalcordinates[11].z:=4;
-
- obj.orginalcordinates[12].x:=0;
- obj.orginalcordinates[12].y:=-20;
- obj.orginalcordinates[12].z:=0;
-
- END;
-
-
-
-
-
- Procedure object1;
-
- var i : integer;
-
- BEGIN
- obj.numberofpoints:=6;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=30;
- obj.orginalcordinates[1].z:=0;
-
- obj.orginalcordinates[2].x:=-15;
- obj.orginalcordinates[2].y:=0;
- obj.orginalcordinates[2].z:=15;
-
- obj.orginalcordinates[3].x:=15;
- obj.orginalcordinates[3].y:=0;
- obj.orginalcordinates[3].z:=15;
-
- obj.orginalcordinates[4].x:=15;
- obj.orginalcordinates[4].y:=0;
- obj.orginalcordinates[4].z:=-15;
-
- obj.orginalcordinates[5].x:=-15;
- obj.orginalcordinates[5].y:=0;
- obj.orginalcordinates[5].z:=-15;
-
- obj.orginalcordinates[6].x:=0;
- obj.orginalcordinates[6].y:=-30;
- obj.orginalcordinates[6].z:=0;
-
- obj.polys[1].howmanypoints:=3;
- obj.polys[2].howmanypoints:=3;
- obj.polys[3].howmanypoints:=3;
- obj.polys[4].howmanypoints:=3;
- obj.polys[5].howmanypoints:=3;
- obj.polys[6].howmanypoints:=3;
- obj.polys[7].howmanypoints:=3;
- obj.polys[8].howmanypoints:=3;
-
- for i:= 1 to 3 do obj.polys[1].whichpoints[i]:=i;
-
- obj.polys[2].whichpoints[1]:=2;
- obj.polys[2].whichpoints[2]:=6;
- obj.polys[2].whichpoints[3]:=3;
-
-
- obj.polys[3].whichpoints[1]:=1;
- obj.polys[3].whichpoints[2]:=5;
- obj.polys[3].whichpoints[3]:=2;
-
-
- obj.polys[4].whichpoints[1]:=5;
- obj.polys[4].whichpoints[2]:=6;
- obj.polys[4].whichpoints[3]:=2;
-
-
- obj.polys[5].whichpoints[1]:=1;
- obj.polys[5].whichpoints[2]:=4;
- obj.polys[5].whichpoints[3]:=5;
-
-
- obj.polys[6].whichpoints[1]:=4;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=5;
-
- obj.polys[7].whichpoints[1]:=1;
- obj.polys[7].whichpoints[2]:=3;
- obj.polys[7].whichpoints[3]:=4;
-
- obj.polys[8].whichpoints[1]:=3;
- obj.polys[8].whichpoints[2]:=6;
- obj.polys[8].whichpoints[3]:=4;
-
-
- obj.numberofpolys:=8;
- for i:= 1 to 8 do obj.polys[i].color:=8;
-
- END;
-
-
-
- Procedure ship3;
-
- var i : INTEGER;
-
- BEGIN
- obj.numberofpoints:=13;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=0;
- obj.orginalcordinates[1].z:=40;
-
- obj.orginalcordinates[2].x:=-20;
- obj.orginalcordinates[2].y:=0;
- obj.orginalcordinates[2].z:=-20;
-
- obj.orginalcordinates[3].x:=-14;
- obj.orginalcordinates[3].y:=5;
- obj.orginalcordinates[3].z:=-23;
-
- obj.orginalcordinates[4].x:=-6;
- obj.orginalcordinates[4].y:=7;
- obj.orginalcordinates[4].z:=-25;
-
- obj.orginalcordinates[5].x:=0;
- obj.orginalcordinates[5].y:=8;
- obj.orginalcordinates[5].z:=-26;
-
- obj.orginalcordinates[6].x:=6;
- obj.orginalcordinates[6].y:=7;
- obj.orginalcordinates[6].z:=-25;
-
- obj.orginalcordinates[7].x:=14;
- obj.orginalcordinates[7].y:=5;
- obj.orginalcordinates[7].z:=-23;
-
- obj.orginalcordinates[8].x:=20;
- obj.orginalcordinates[8].y:=0;
- obj.orginalcordinates[8].z:=-20;
-
- obj.orginalcordinates[9].x:=14;
- obj.orginalcordinates[9].y:=-5;
- obj.orginalcordinates[9].z:=-23;
-
- obj.orginalcordinates[10].x:=6;
- obj.orginalcordinates[10].y:=-7;
- obj.orginalcordinates[10].z:=-25;
-
- obj.orginalcordinates[11].x:=0;
- obj.orginalcordinates[11].y:=-8;
- obj.orginalcordinates[11].z:=-26;
-
- obj.orginalcordinates[12].x:=-6;
- obj.orginalcordinates[12].y:=-7;
- obj.orginalcordinates[12].z:=-25;
-
- obj.orginalcordinates[13].x:=-14;
- obj.orginalcordinates[13].y:=-5;
- obj.orginalcordinates[13].z:=-23;
-
-
- for i:= 1 to 18 do obj.polys[i].howmanypoints:=3;
- for i:= 8 to 11 do obj.polys[i].howmanypoints:=4;
-
- obj.numberofpolys:=18;
-
- obj.polys[1].whichpoints[1]:=3;
- obj.polys[1].whichpoints[2]:=2;
- obj.polys[1].whichpoints[3]:=1;
-
- obj.polys[2].whichpoints[1]:=4;
- obj.polys[2].whichpoints[2]:=3;
- obj.polys[2].whichpoints[3]:=1;
-
- obj.polys[3].whichpoints[1]:=5;
- obj.polys[3].whichpoints[2]:=4;
- obj.polys[3].whichpoints[3]:=1;
-
- obj.polys[4].whichpoints[1]:=5;
- obj.polys[4].whichpoints[2]:=1;
- obj.polys[4].whichpoints[3]:=6;
-
- obj.polys[5].whichpoints[1]:=6;
- obj.polys[5].whichpoints[2]:=1;
- obj.polys[5].whichpoints[3]:=7;
-
- obj.polys[6].whichpoints[1]:=7;
- obj.polys[6].whichpoints[2]:=1;
- obj.polys[6].whichpoints[3]:=8;
-
- obj.polys[7].whichpoints[1]:=3;
- obj.polys[7].whichpoints[2]:=2;
- obj.polys[7].whichpoints[3]:=13;
-
- obj.polys[8].whichpoints[1]:=3;
- obj.polys[8].whichpoints[2]:=13;
- obj.polys[8].whichpoints[3]:=12;
- obj.polys[8].whichpoints[4]:=4;
-
- obj.polys[9].whichpoints[1]:=4;
- obj.polys[9].whichpoints[2]:=12;
- obj.polys[9].whichpoints[3]:=11;
- obj.polys[9].whichpoints[4]:=5;
-
- obj.polys[10].whichpoints[1]:=5;
- obj.polys[10].whichpoints[2]:=11;
- obj.polys[10].whichpoints[3]:=10;
- obj.polys[10].whichpoints[4]:=6;
-
- obj.polys[11].whichpoints[1]:=6;
- obj.polys[11].whichpoints[2]:=10;
- obj.polys[11].whichpoints[3]:=9;
- obj.polys[11].whichpoints[4]:=7;
-
- obj.polys[12].whichpoints[1]:=7;
- obj.polys[12].whichpoints[2]:=9;
- obj.polys[12].whichpoints[3]:=8;
-
- obj.polys[12].whichpoints[1]:=7;
- obj.polys[12].whichpoints[2]:=9;
- obj.polys[12].whichpoints[3]:=8;
-
- obj.polys[13].whichpoints[1]:=1;
- obj.polys[13].whichpoints[2]:=2;
- obj.polys[13].whichpoints[3]:=13;
-
- obj.polys[14].whichpoints[1]:=1;
- obj.polys[14].whichpoints[2]:=13;
- obj.polys[14].whichpoints[3]:=12;
-
- obj.polys[15].whichpoints[1]:=1;
- obj.polys[15].whichpoints[2]:=12;
- obj.polys[15].whichpoints[3]:=11;
-
- obj.polys[16].whichpoints[1]:=1;
- obj.polys[16].whichpoints[2]:=11;
- obj.polys[16].whichpoints[3]:=10;
-
- obj.polys[17].whichpoints[1]:=1;
- obj.polys[17].whichpoints[2]:=10;
- obj.polys[17].whichpoints[3]:=9;
-
- obj.polys[18].whichpoints[1]:=1;
- obj.polys[18].whichpoints[2]:=9;
- obj.polys[18].whichpoints[3]:=8;
-
- for i:= 1 to 18 do obj.polys[i].color:=6;
- for i:= 8 to 11 do obj.polys[i].color:=9;
-
-
- end;
-
- Procedure ship2;
-
- var i : integer;
-
- BEGIN
- obj.numberofpoints:=5;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=0;
- obj.orginalcordinates[1].z:=60;
-
- obj.orginalcordinates[2].x:=-40;
- obj.orginalcordinates[2].y:=0;
- obj.orginalcordinates[2].z:=-40;
-
- obj.orginalcordinates[3].x:=0;
- obj.orginalcordinates[3].y:=20;
- obj.orginalcordinates[3].z:=-50;
-
- obj.orginalcordinates[4].x:=40;
- obj.orginalcordinates[4].y:=0;
- obj.orginalcordinates[4].z:=-40;
-
- obj.orginalcordinates[5].x:=0;
- obj.orginalcordinates[5].y:=-20;
- obj.orginalcordinates[5].z:=-50;
-
- for i:= 1 to 4 do obj.polys[i].howmanypoints:=3;
- obj.polys[5].howmanypoints:=4;
-
- obj.numberofpolys:=5;
-
- obj.polys[1].whichpoints[1]:=3;
- obj.polys[1].whichpoints[2]:=2;
- obj.polys[1].whichpoints[3]:=1;
-
- obj.polys[2].whichpoints[1]:=3;
- obj.polys[2].whichpoints[2]:=1;
- obj.polys[2].whichpoints[3]:=4;
-
- obj.polys[3].whichpoints[1]:=4;
- obj.polys[3].whichpoints[2]:=1;
- obj.polys[3].whichpoints[3]:=5;
-
- obj.polys[4].whichpoints[1]:=2;
- obj.polys[4].whichpoints[2]:=1;
- obj.polys[4].whichpoints[3]:=5;
-
- obj.polys[5].whichpoints[1]:=3;
- obj.polys[5].whichpoints[2]:=2;
- obj.polys[5].whichpoints[3]:=5;
- obj.polys[5].whichpoints[4]:=4;
-
- for i:= 1 to 5 do obj.polys[i].color:=8;
-
-
- end;
-
-
-
-
-
-
- Procedure ship;
-
- var i : integer;
-
- BEGIN
- obj.numberofpoints:=7;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=0;
- obj.orginalcordinates[1].z:=60;
-
- obj.orginalcordinates[2].x:=-40;
- obj.orginalcordinates[2].y:=0;
- obj.orginalcordinates[2].z:=-40;
-
- obj.orginalcordinates[3].x:=-20;
- obj.orginalcordinates[3].y:=10;
- obj.orginalcordinates[3].z:=-50;
-
- obj.orginalcordinates[4].x:=20;
- obj.orginalcordinates[4].y:=10;
- obj.orginalcordinates[4].z:=-50;
-
- obj.orginalcordinates[5].x:=40;
- obj.orginalcordinates[5].y:=0;
- obj.orginalcordinates[5].z:=-40;
-
- obj.orginalcordinates[6].x:=20;
- obj.orginalcordinates[6].y:=-10;
- obj.orginalcordinates[6].z:=-50;
-
- obj.orginalcordinates[7].x:=-20;
- obj.orginalcordinates[7].y:=-10;
- obj.orginalcordinates[7].z:=-50;
-
- for i:= 1 to 9 do obj.polys[i].howmanypoints:=3;
- obj.polys[5].howmanypoints:=4;
-
- obj.numberofpolys:=9;
-
- obj.polys[1].whichpoints[1]:=3;
- obj.polys[1].whichpoints[2]:=2;
- obj.polys[1].whichpoints[3]:=1;
-
- obj.polys[2].whichpoints[1]:=3;
- obj.polys[2].whichpoints[2]:=1;
- obj.polys[2].whichpoints[3]:=4;
-
- obj.polys[3].whichpoints[1]:=4;
- obj.polys[3].whichpoints[2]:=1;
- obj.polys[3].whichpoints[3]:=5;
-
- obj.polys[4].whichpoints[1]:=3;
- obj.polys[4].whichpoints[2]:=2;
- obj.polys[4].whichpoints[3]:=7;
-
- obj.polys[5].whichpoints[1]:=3;
- obj.polys[5].whichpoints[2]:=7;
- obj.polys[5].whichpoints[3]:=6;
- obj.polys[5].whichpoints[4]:=4;
-
- obj.polys[6].whichpoints[1]:=4;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=5;
-
- obj.polys[7].whichpoints[1]:=1;
- obj.polys[7].whichpoints[2]:=2;
- obj.polys[7].whichpoints[3]:=7;
-
- obj.polys[8].whichpoints[1]:=1;
- obj.polys[8].whichpoints[2]:=7;
- obj.polys[8].whichpoints[3]:=6;
-
- obj.polys[9].whichpoints[1]:=1;
- obj.polys[9].whichpoints[2]:=6;
- obj.polys[9].whichpoints[3]:=5;
-
- for i:= 1 to 9 do obj.polys[i].color:=6;
- obj.polys[5].color:=9;
-
- end;
-
-
- Procedure object3;
-
- var i : integer;
-
- BEGIN
- obj.numberofpoints:=14;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
-
- obj.orginalcordinates[1].x:=0;
- obj.orginalcordinates[1].y:=30;
- obj.orginalcordinates[1].z:=0;
-
- obj.orginalcordinates[2].x:=-20;
- obj.orginalcordinates[2].y:=20;
- obj.orginalcordinates[2].z:=20;
-
- obj.orginalcordinates[3].x:=20;
- obj.orginalcordinates[3].y:=20;
- obj.orginalcordinates[3].z:=20;
-
- obj.orginalcordinates[4].x:=-30;
- obj.orginalcordinates[4].y:=0;
- obj.orginalcordinates[4].z:=0;
-
- obj.orginalcordinates[5].x:=0;
- obj.orginalcordinates[5].y:=0;
- obj.orginalcordinates[5].z:=30;
-
- obj.orginalcordinates[6].x:=30;
- obj.orginalcordinates[6].y:=0;
- obj.orginalcordinates[6].z:=0;
-
- obj.orginalcordinates[7].x:=-20;
- obj.orginalcordinates[7].y:=-20;
- obj.orginalcordinates[7].z:=20;
-
- obj.orginalcordinates[8].x:=20;
- obj.orginalcordinates[8].y:=-20;
- obj.orginalcordinates[8].z:=20;
-
- obj.orginalcordinates[9].x:=0;
- obj.orginalcordinates[9].y:=-30;
- obj.orginalcordinates[9].z:=0;
-
- obj.orginalcordinates[10].x:=-20;
- obj.orginalcordinates[10].y:=20;
- obj.orginalcordinates[10].z:=-20;
-
- obj.orginalcordinates[11].x:=20;
- obj.orginalcordinates[11].y:=20;
- obj.orginalcordinates[11].z:=-20;
-
- obj.orginalcordinates[12].x:=0;
- obj.orginalcordinates[12].y:=0;
- obj.orginalcordinates[12].z:=-30;
-
- obj.orginalcordinates[13].x:=-20;
- obj.orginalcordinates[13].y:=-20;
- obj.orginalcordinates[13].z:=-20;
-
- obj.orginalcordinates[14].x:=20;
- obj.orginalcordinates[14].y:=-20;
- obj.orginalcordinates[14].z:=-20;
-
- for i:= 1 to 24 do obj.polys[i].howmanypoints:=3;
-
- obj.numberofpolys:=24;
-
- obj.polys[1].whichpoints[1]:=1;
- obj.polys[1].whichpoints[2]:=2;
- obj.polys[1].whichpoints[3]:=3;
-
- obj.polys[2].whichpoints[1]:=1;
- obj.polys[2].whichpoints[2]:=3;
- obj.polys[2].whichpoints[3]:=11;
-
- obj.polys[3].whichpoints[1]:=1;
- obj.polys[3].whichpoints[2]:=11;
- obj.polys[3].whichpoints[3]:=10;
-
- obj.polys[4].whichpoints[1]:=1;
- obj.polys[4].whichpoints[2]:=10;
- obj.polys[4].whichpoints[3]:=2;
-
- obj.polys[5].whichpoints[1]:=2;
- obj.polys[5].whichpoints[2]:=5;
- obj.polys[5].whichpoints[3]:=3;
-
- obj.polys[6].whichpoints[1]:=3;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=11;
-
- obj.polys[7].whichpoints[1]:=11;
- obj.polys[7].whichpoints[2]:=12;
- obj.polys[7].whichpoints[3]:=10;
-
- obj.polys[8].whichpoints[1]:=10;
- obj.polys[8].whichpoints[2]:=4;
- obj.polys[8].whichpoints[3]:=2;
-
- obj.polys[9].whichpoints[1]:=2;
- obj.polys[9].whichpoints[2]:=7;
- obj.polys[9].whichpoints[3]:=5;
-
- obj.polys[10].whichpoints[1]:=3;
- obj.polys[10].whichpoints[2]:=5;
- obj.polys[10].whichpoints[3]:=8;
-
- obj.polys[11].whichpoints[1]:=3;
- obj.polys[11].whichpoints[2]:=8;
- obj.polys[11].whichpoints[3]:=6;
-
- obj.polys[12].whichpoints[1]:=11;
- obj.polys[12].whichpoints[2]:=6;
- obj.polys[12].whichpoints[3]:=14;
-
- obj.polys[13].whichpoints[1]:=11;
- obj.polys[13].whichpoints[2]:=14;
- obj.polys[13].whichpoints[3]:=12;
-
- obj.polys[14].whichpoints[1]:=10;
- obj.polys[14].whichpoints[2]:=12;
- obj.polys[14].whichpoints[3]:=13;
-
- obj.polys[15].whichpoints[1]:=10;
- obj.polys[15].whichpoints[2]:=13;
- obj.polys[15].whichpoints[3]:=4;
-
- obj.polys[16].whichpoints[1]:=2;
- obj.polys[16].whichpoints[2]:=4;
- obj.polys[16].whichpoints[3]:=7;
-
- obj.polys[17].whichpoints[1]:=7;
- obj.polys[17].whichpoints[2]:=9;
- obj.polys[17].whichpoints[3]:=8;
-
- obj.polys[18].whichpoints[1]:=8;
- obj.polys[18].whichpoints[2]:=9;
- obj.polys[18].whichpoints[3]:=14;
-
- obj.polys[19].whichpoints[1]:=14;
- obj.polys[19].whichpoints[2]:=9;
- obj.polys[19].whichpoints[3]:=13;
-
- obj.polys[20].whichpoints[1]:=13;
- obj.polys[20].whichpoints[2]:=9;
- obj.polys[20].whichpoints[3]:=7;
-
- obj.polys[21].whichpoints[1]:=5;
- obj.polys[21].whichpoints[2]:=7;
- obj.polys[21].whichpoints[3]:=8;
-
- obj.polys[22].whichpoints[1]:=6;
- obj.polys[22].whichpoints[2]:=8;
- obj.polys[22].whichpoints[3]:=14;
-
- obj.polys[23].whichpoints[1]:=12;
- obj.polys[23].whichpoints[2]:=14;
- obj.polys[23].whichpoints[3]:=13;
-
- obj.polys[24].whichpoints[1]:=4;
- obj.polys[24].whichpoints[2]:=13;
- obj.polys[24].whichpoints[3]:=7;
-
- for i:= 1 to 24 do obj.polys[i].color:=8;
-
-
- END;
-
-
-
- Procedure semitriangle;
-
- var i : integer;
-
- BEGIN
- obj.numberofpoints:=8;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
-
- obj.orginalcordinates[1].x:=-2;
- obj.orginalcordinates[1].y:=-33;
- obj.orginalcordinates[1].z:=2;
-
- obj.orginalcordinates[2].x:=-33;
- obj.orginalcordinates[2].y:=33;
- obj.orginalcordinates[2].z:=33;
-
- obj.orginalcordinates[3].x:=33;
- obj.orginalcordinates[3].y:=33;
- obj.orginalcordinates[3].z:=33;
-
- obj.orginalcordinates[4].x:=2;
- obj.orginalcordinates[4].y:=-33;
- obj.orginalcordinates[4].z:=2;
-
- obj.orginalcordinates[5].x:=-2;
- obj.orginalcordinates[5].y:=-33;
- obj.orginalcordinates[5].z:=-2;
-
- obj.orginalcordinates[6].x:=-33;
- obj.orginalcordinates[6].y:=33;
- obj.orginalcordinates[6].z:=-33;
-
- obj.orginalcordinates[7].x:=33;
- obj.orginalcordinates[7].y:=33;
- obj.orginalcordinates[7].z:=-33;
-
- obj.orginalcordinates[8].x:=2;
- obj.orginalcordinates[8].y:=-33;
- obj.orginalcordinates[8].z:=-2;
-
- for i:= 1 to 4 do obj.polys[1].whichpoints[i]:=i;
-
- obj.polys[2].whichpoints[1]:=8;
- obj.polys[2].whichpoints[2]:=7;
- obj.polys[2].whichpoints[3]:=6;
- obj.polys[2].whichpoints[4]:=5;
-
- obj.polys[3].whichpoints[1]:=5;
- obj.polys[3].whichpoints[2]:=6;
- obj.polys[3].whichpoints[3]:=2;
- obj.polys[3].whichpoints[4]:=1;
-
- obj.polys[4].whichpoints[1]:=4;
- obj.polys[4].whichpoints[2]:=3;
- obj.polys[4].whichpoints[3]:=7;
- obj.polys[4].whichpoints[4]:=8;
-
- obj.polys[5].whichpoints[1]:=5;
- obj.polys[5].whichpoints[2]:=1;
- obj.polys[5].whichpoints[3]:=4;
- obj.polys[5].whichpoints[4]:=8;
-
- obj.polys[6].whichpoints[1]:=2;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=7;
- obj.polys[6].whichpoints[4]:=3;
-
- obj.numberofpolys:=6;
- for i:= 1 to 6 do obj.polys[i].color:=8;
- for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
- END;
-
- Procedure rektangle1;
-
- var i : integer;
-
-
- BEGIN
- obj.numberofpoints:=8;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
-
-
- obj.orginalcordinates[1].x:=-5;
- obj.orginalcordinates[1].y:=-5;
- obj.orginalcordinates[1].z:=30;
-
- obj.orginalcordinates[2].x:=-5;
- obj.orginalcordinates[2].y:=5;
- obj.orginalcordinates[2].z:=30;
-
- obj.orginalcordinates[3].x:=5;
- obj.orginalcordinates[3].y:=5;
- obj.orginalcordinates[3].z:=30;
-
- obj.orginalcordinates[4].x:=5;
- obj.orginalcordinates[4].y:=-5;
- obj.orginalcordinates[4].z:=30;
-
- obj.orginalcordinates[5].x:=-5;
- obj.orginalcordinates[5].y:=-5;
- obj.orginalcordinates[5].z:=-30;
-
- obj.orginalcordinates[6].x:=-5;
- obj.orginalcordinates[6].y:=5;
- obj.orginalcordinates[6].z:=-30;
-
- obj.orginalcordinates[7].x:=5;
- obj.orginalcordinates[7].y:=5;
- obj.orginalcordinates[7].z:=-30;
-
- obj.orginalcordinates[8].x:=5;
- obj.orginalcordinates[8].y:=-5;
- obj.orginalcordinates[8].z:=-30;
-
- for i:= 1 to 4 do obj.polys[1].whichpoints[i]:=i;
-
- obj.polys[2].whichpoints[1]:=8;
- obj.polys[2].whichpoints[2]:=7;
- obj.polys[2].whichpoints[3]:=6;
- obj.polys[2].whichpoints[4]:=5;
-
- obj.polys[3].whichpoints[1]:=5;
- obj.polys[3].whichpoints[2]:=6;
- obj.polys[3].whichpoints[3]:=2;
- obj.polys[3].whichpoints[4]:=1;
-
- obj.polys[4].whichpoints[1]:=4;
- obj.polys[4].whichpoints[2]:=3;
- obj.polys[4].whichpoints[3]:=7;
- obj.polys[4].whichpoints[4]:=8;
-
- obj.polys[5].whichpoints[1]:=5;
- obj.polys[5].whichpoints[2]:=1;
- obj.polys[5].whichpoints[3]:=4;
- obj.polys[5].whichpoints[4]:=8;
-
- obj.polys[6].whichpoints[1]:=2;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=7;
- obj.polys[6].whichpoints[4]:=3;
-
- obj.numberofpolys:=6;
- for i:= 1 to 6 do obj.polys[i].color:=8;
- for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
- END;
-
- Procedure rektangle2;
-
- var i : integer;
-
-
- BEGIN
- obj.numberofpoints:=8;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
- obj.orginalcordinates[1].x:=-30;
- obj.orginalcordinates[1].y:=-5;
- obj.orginalcordinates[1].z:=30;
-
- obj.orginalcordinates[2].x:=-30;
- obj.orginalcordinates[2].y:=5;
- obj.orginalcordinates[2].z:=30;
-
- obj.orginalcordinates[3].x:=30;
- obj.orginalcordinates[3].y:=5;
- obj.orginalcordinates[3].z:=30;
-
- obj.orginalcordinates[4].x:=30;
- obj.orginalcordinates[4].y:=-5;
- obj.orginalcordinates[4].z:=30;
-
- obj.orginalcordinates[5].x:=-30;
- obj.orginalcordinates[5].y:=-5;
- obj.orginalcordinates[5].z:=-30;
-
- obj.orginalcordinates[6].x:=-30;
- obj.orginalcordinates[6].y:=5;
- obj.orginalcordinates[6].z:=-30;
-
- obj.orginalcordinates[7].x:=30;
- obj.orginalcordinates[7].y:=5;
- obj.orginalcordinates[7].z:=-30;
-
- obj.orginalcordinates[8].x:=30;
- obj.orginalcordinates[8].y:=-5;
- obj.orginalcordinates[8].z:=-30;
-
-
- for i:= 1 to 4 do obj.polys[1].whichpoints[i]:=i;
-
- obj.polys[2].whichpoints[1]:=8;
- obj.polys[2].whichpoints[2]:=7;
- obj.polys[2].whichpoints[3]:=6;
- obj.polys[2].whichpoints[4]:=5;
-
- obj.polys[3].whichpoints[1]:=5;
- obj.polys[3].whichpoints[2]:=6;
- obj.polys[3].whichpoints[3]:=2;
- obj.polys[3].whichpoints[4]:=1;
-
- obj.polys[4].whichpoints[1]:=4;
- obj.polys[4].whichpoints[2]:=3;
- obj.polys[4].whichpoints[3]:=7;
- obj.polys[4].whichpoints[4]:=8;
-
- obj.polys[5].whichpoints[1]:=5;
- obj.polys[5].whichpoints[2]:=1;
- obj.polys[5].whichpoints[3]:=4;
- obj.polys[5].whichpoints[4]:=8;
-
- obj.polys[6].whichpoints[1]:=2;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=7;
- obj.polys[6].whichpoints[4]:=3;
-
- obj.numberofpolys:=6;
- for i:= 1 to 6 do obj.polys[i].color:=8;
- for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
-
- end;
-
- procedure cube;
-
- var i : integer;
-
-
-
- begin
- obj.numberofpoints:=8;
- obj.degre.x:=0;
- obj.degre.y:=0;
- obj.degre.z:=0;
- obj.degreinc.x:=3;
- obj.degreinc.y:=3;
- obj.degreinc.z:=3;
-
- obj.orginalcordinates[1].x:=-20;
- obj.orginalcordinates[1].y:=-20;
- obj.orginalcordinates[1].z:=20;
-
- obj.orginalcordinates[2].x:=-20;
- obj.orginalcordinates[2].y:=20;
- obj.orginalcordinates[2].z:=20;
-
- obj.orginalcordinates[3].x:=20;
- obj.orginalcordinates[3].y:=20;
- obj.orginalcordinates[3].z:=20;
-
- obj.orginalcordinates[4].x:=20;
- obj.orginalcordinates[4].y:=-20;
- obj.orginalcordinates[4].z:=20;
-
- obj.orginalcordinates[5].x:=-20;
- obj.orginalcordinates[5].y:=-20;
- obj.orginalcordinates[5].z:=-20;
-
- obj.orginalcordinates[6].x:=-20;
- obj.orginalcordinates[6].y:=20;
- obj.orginalcordinates[6].z:=-20;
-
- obj.orginalcordinates[7].x:=20;
- obj.orginalcordinates[7].y:=20;
- obj.orginalcordinates[7].z:=-20;
-
- obj.orginalcordinates[8].x:=20;
- obj.orginalcordinates[8].y:=-20;
- obj.orginalcordinates[8].z:=-20;
-
- for i:= 1 to 4 do obj.polys[1].whichpoints[i]:=i;
-
- obj.polys[2].whichpoints[1]:=8;
- obj.polys[2].whichpoints[2]:=7;
- obj.polys[2].whichpoints[3]:=6;
- obj.polys[2].whichpoints[4]:=5;
-
- obj.polys[3].whichpoints[1]:=5;
- obj.polys[3].whichpoints[2]:=6;
- obj.polys[3].whichpoints[3]:=2;
- obj.polys[3].whichpoints[4]:=1;
-
- obj.polys[4].whichpoints[1]:=4;
- obj.polys[4].whichpoints[2]:=3;
- obj.polys[4].whichpoints[3]:=7;
- obj.polys[4].whichpoints[4]:=8;
-
- obj.polys[5].whichpoints[1]:=5;
- obj.polys[5].whichpoints[2]:=1;
- obj.polys[5].whichpoints[3]:=4;
- obj.polys[5].whichpoints[4]:=8;
-
- obj.polys[6].whichpoints[1]:=2;
- obj.polys[6].whichpoints[2]:=6;
- obj.polys[6].whichpoints[3]:=7;
- obj.polys[6].whichpoints[4]:=3;
-
- obj.numberofpolys:=6;
- for i:= 1 to 6 do obj.polys[i].color:=8;
- for i:= 1 to 6 do obj.polys[i].howmanypoints:=4;
-
-
- end;
-
- Function dotproduct (nor,lig :point):integer;
-
- begin
- dotproduct:=nor.x*lig.x+nor.y*lig.y+nor.z*lig.z;
- End;
-
-
- Procedure QUICKSORT(lo,hi : INTEGER;var world : SORTTYPE);
-
- Procedure LORT(l,r : INTEGER; Var World : SORTTYPE);
-
- var i,j,x,y : INTEGER;
-
- begin
- i:=l;
- j:=r;
- x:=world.sortlist[(l+r) shr 1,2];
- repeat
- while world.sortlist[i,2]<x do inc(i);
- while x<world.sortlist[j,2] do dec(j);
- if i<=j then begin
- y:=world.sortlist[i,1];
- world.sortlist[i,1]:=world.sortlist[j,1];
- world.sortlist[j,1]:=y;
- y:=world.sortlist[i,2];
- world.sortlist[i,2]:=world.sortlist[j,2];
- world.sortlist[j,2]:=y;
- inc(i);
- dec(j)
- end
- until i>j;
- if l<j then lort(l,j,world);
- if i<r then lort(i,r,world)
- end;
-
- begin
- lort(lo,hi,world)
- end;
-
-
- Procedure ZXYROUT;
-
- Var a,b,c,d,e,f,g,h,j : REAL;
- i : INTEGER;
-
- Begin
- a:=cosa[obj.degre.y]*cosa[obj.degre.z];
- b:=cosa[obj.degre.y]*sina[obj.degre.z];
- c:=-sina[obj.degre.y];
- d:=sina[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]-cosa[obj.degre.x]*sina[obj.degre.z];
- e:=sina[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]+cosa[obj.degre.x]*cosa[obj.degre.z];
- f:=sina[obj.degre.x]*cosa[obj.degre.y];
- g:=cosa[obj.degre.x]*sina[obj.degre.y]*cosa[obj.degre.z]+sina[obj.degre.x]*sina[obj.degre.z];
- h:=cosa[obj.degre.x]*sina[obj.degre.y]*sina[obj.degre.z]-sina[obj.degre.x]*cosa[obj.degre.z];
- j:=cosa[obj.degre.x]*cosa[obj.degre.y];
- for i:= 1 to obj.numberofpoints do begin
- obj.rotatedcordinates[i].x :=round( obj.objpos.x+obj.orginalcordinates[i].x*a+obj.orginalcordinates[i].y*b
- +obj.orginalcordinates[i].z*c);
- obj.rotatedcordinates[i].y :=round( obj.objpos.y+obj.orginalcordinates[i].x*d+obj.orginalcordinates[i].y*e
- +obj.orginalcordinates[i].z*f);
- obj.rotatedcordinates[i].z :=round( obj.objpos.z+obj.orginalcordinates[i].x*g+obj.orginalcordinates[i].y*h
- +obj.orginalcordinates[i].z*j);
- end;
- end;
-
- procedure uppgradeobject;
-
- begin
- inc(obj.degre.x,obj.degreinc.x);
- inc(obj.degre.y,obj.degreinc.y);
- inc(obj.degre.z,obj.degreinc.z);
- if obj.degre.x<0 then inc(obj.degre.x,360);
- if obj.degre.x>360 then dec(obj.degre.x,360);
- if obj.degre.y<0 then inc(obj.degre.y,360);
- if obj.degre.y>360 then dec(obj.degre.y,360);
- if obj.degre.z<0 then inc(obj.degre.z,360);
- if obj.degre.z>360 then dec(obj.degre.z,360);
- end;
-
- Procedure rotateobjects;
-
- begin
- zxyrout;
- end;
-
- procedure perspective;
-
- var i : INTEGER;
-
- begin
- for i:= 1 to obj.numberofpoints do begin
- obj.screencordinates[i].x:=320+round(longint(obj.rotatedcordinates[i].x)*500/obj.rotatedcordinates[i].z);
- obj.screencordinates[i].y:=175+round(longint(obj.rotatedcordinates[i].y)*500/obj.rotatedcordinates[i].z);
- end;
- end;
-
- procedure readin;
-
- Var i,b : BYTE;
- a : INTEGER;
- col,ux,vx,uy,vy,uz,vz : INTEGER;
- kv : WORD;
- normal : POINT;
- temp,fac : real;
- n : POINT;
-
-
-
- begin
- for i:= 1 to obj.numberofpolys do begin
- a:=0;
- for b:= 1 to obj.polys[i].howmanypoints do begin
- if a<obj.rotatedcordinates[obj.polys[i].whichpoints[b]].z then
- a:=obj.rotatedcordinates[obj.polys[i].whichpoints[b]].z;
- obj.polys[i].cornerpoints[b]:= obj.screencordinates[obj.polys[i].whichpoints[b]];
- end;
- obj.polys[i].zposition:=a;
- ux:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].x-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].x;
- vx:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].x-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].x;
- uy:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].y-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].y;
- vy:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].y-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].y;
- uz:=obj.rotatedcordinates[obj.polys[i].whichpoints[2]].z-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].z;
- vz:=obj.rotatedcordinates[obj.polys[i].whichpoints[3]].z-obj.rotatedcordinates[obj.polys[i].whichpoints[1]].z;
- n.x:=(uy*vz-uz*vy);
- n.y:=(uz*vx-ux*vz);
- n.z:=(ux*vy-uy*vx);
- temp:=(sqrt((longint(n.x)*longint(n.x)+longint(n.z)*longint(n.z)+longint(n.y)*longint(n.y))));
- if temp=0 then temp:=0.01;
- fac:=7/temp;
- normal.x:=round(n.x*fac);
- normal.y:=round(n.y*fac);
- normal.z:=round(n.z*fac);
- if normal.z>7 then obj.polys[i].hidden:=true else obj.polys[i].hidden:=false;
- col:=dotproduct (normal,light);
- obj.polys[i].shadedcolor:=obj.polys[i].color+col;
- end;
- for i:= 1 to obj.numberofpolys do obj.sortdata.sortlist[i,2]:=
- obj.polys[obj.sortdata.sortlist[i,1]].zposition;
-
- end;
-
- procedure putpolys;
-
- var i : INTEGER;
-
- begin
- quicksort (1,obj.numberofpolys,obj.sortdata);
-
- setvisualpage(page);
- page:=page xor 3;
- setactivepage(page);
- clearviewport;
- setcolor(15);
- for i:= obj.numberofpolys downto 1 do if obj.polys[i].hidden=false then begin
- setcolor(obj.polys[obj.sortdata.sortlist[i,1]].shadedcolor);
- setfillstyle(1,obj.polys[obj.sortdata.sortlist[i,1]].shadedcolor);
- fillpoly (obj.polys[obj.sortdata.sortlist[i,1]].howmanypoints,obj.polys[obj.sortdata.sortlist[i,1]].cornerpoints);
- end;
- end;
-
- Procedure initcolors;
-
- begin
- setrgbpalette(1,0,0,21);
- setrgbpalette(2,0,0,24);
- setrgbpalette(3,0,0,27);
- setrgbpalette(4,0,0,30);
- setrgbpalette(5,0,0,33);
- setrgbpalette(20,0,0,36);
- setrgbpalette(7,0,0,39);
- setrgbpalette(56,0,0,42);
- setrgbpalette(57,0,0,45);
- setrgbpalette(58,0,0,48);
- setrgbpalette(59,0,0,51);
- setrgbpalette(60,0,0,54);
- setrgbpalette(61,0,0,57);
- setrgbpalette(62,0,0,60);
- setrgbpalette(63,0,0,63);
- end;
-
-
- procedure init;
-
- var gd,gm : INTEGER;
- i : INTEGER;
-
- begin
- gd:=vga;
- gm:=vgamed; { graphics mode 640*350 pixels }
- initgraph(gd,gm,'c:\bp\bgi'{your bgi directory});
- for i:=0 to 360 do begin
- sina[i]:=sin(i*pi/180{*/180 converts it to radians which the computer
- calculed in don't think more about this});
- cosa[i]:=cos(i*pi/180);
- end;
- initcolors;
- page:=2;
- obj.objpos.x:=0;
- obj.objpos.y:=0;
- obj.objpos.z:=150;
- light.x:=0;
- light.y:=0;
- light.z:=1;
- cube;
- for i:= 1 to obj.numberofpolys do obj.sortdata.sortlist[i,1]:=i;
- end;
-
-
- procedure Close;
-
- begin
- closegraph;
- end;
-
- begin
- init;
- repeat
- uppgradeobject;
- rotateobjects;
- perspective;
- readin;
- putpolys;
- until keypressed;
- close;
- end.